package scheduler

import (
	"log"
	"os"
	"sync"

	"github.com/robfig/cron/v3" //定时任务调度
)

type Periodic struct {
	cron *cron.Cron
}

var p *Periodic
var once sync.Once

func Get() *Periodic {
	once.Do(func() {
		p = &Periodic{cron.New(cron.WithSeconds(), cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)), cron.WithLogger(
			cron.VerbosePrintfLogger(log.New(os.Stdout, "cron: ", log.LstdFlags))))}
	})
	return p
}

func (p *Periodic) Start() {
	p.cron.Start()
}

func (p *Periodic) Stop() {
	p.cron.Stop()
}

func (p *Periodic) AddJob(cron string, f func()) error {
	_, err := p.cron.AddFunc(cron, f)
	return err
}
